home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 176-200 / scopedisk185 / calc / calcmenus.mod < prev    next >
Text File  |  1995-03-19  |  5KB  |  188 lines

  1. IMPLEMENTATION MODULE CalcMenus;
  2.  
  3.  
  4. FROM SYSTEM      IMPORT ADR, BYTE, TERMPROC;
  5. FROM Intuition   IMPORT IntuiMessage, ITEMNUM, ItemFlags, ItemFlagSet,
  6.                 CheckWidth, SetMenuStrip, MenuItemPtr, ItemAddress,
  7.                 IntuiText, AutoRequest, IDCMPFlagSet, MenuNULL;
  8. FROM Rasters     IMPORT Jam1;
  9. FROM EasyMenus   IMPORT StartStrip, DisposeStrip, currentStrip,
  10.                 stripFailed, AddMenu, AddItem, nextItemFlags,
  11.                 currentItem, nextIntuiLeftEdge, currentIntui,
  12.                 nextItemTopEdge, nextTextAttr;
  13. FROM CalcDisplay IMPORT DoLCD, window, textAttr;
  14. FROM CalcGadgets IMPORT GhostUnused;
  15. FROM CalcBrains  IMPORT value, stoValue;
  16.  
  17.  
  18. CONST
  19.   About1 = "Calc V1.01, 25-Mar-89";
  20.   About2 = "Copyright © 1989 Martin Taillefer";
  21.   About3 = "All Rights Reserved";
  22.   About4 = "Freely redistributable";
  23.  
  24.  
  25. PROCEDURE WhoDoneIt();
  26. VAR
  27.   intui : ARRAY [0..4] OF IntuiText;
  28.   i     : CARDINAL;
  29.   bool  : BOOLEAN;
  30. BEGIN
  31.   FOR i:=0 TO 4 DO
  32.     WITH intui[i] DO
  33.       FrontPen  := BYTE(0);
  34.       DrawMode  := Jam1;
  35.       LeftEdge  := 16;
  36.       TopEdge   := 5+10*i;
  37.       ITextFont := ADR(textAttr);
  38.       NextText  := ADR(intui[i+1]);
  39.     END;
  40.   END;
  41.   intui[3].NextText:=NIL;
  42.   intui[4].NextText:=NIL;
  43.  
  44.   intui[0].IText:=ADR(About1);
  45.   intui[1].IText:=ADR(About2);
  46.   intui[2].IText:=ADR(About3);
  47.   intui[3].IText:=ADR(About4);
  48.   INC(intui[3].TopEdge,10);
  49.  
  50.   intui[4].IText:=ADR("  OK  ");
  51.   intui[4].LeftEdge:=6;
  52.   intui[4].TopEdge:=3;
  53.   
  54.   bool:=AutoRequest(NIL,ADR(intui[0]),NIL,ADR(intui[4]),
  55.                     IDCMPFlagSet{},IDCMPFlagSet{},320,72);
  56. END WhoDoneIt;
  57.  
  58.  
  59. PROCEDURE TerminateCalcMenus;
  60. BEGIN
  61.   DisposeStrip(currentStrip);
  62. END TerminateCalcMenus;
  63.  
  64.  
  65. PROCEDURE InitMenuStuff(): BOOLEAN;
  66.  
  67.   (*$S-*)
  68.   PROCEDURE AddItemX(name:ARRAY OF CHAR; cmdkey:CHAR; xclude:LONGBITSET);
  69.   BEGIN
  70.     AddItem(name,cmdkey);
  71.     currentItem^.MutualExclude:=xclude;
  72.   END AddItemX;
  73.  
  74.   PROCEDURE AddSeperator();
  75.   BEGIN
  76.     AddItem("---------------",0C);
  77.     EXCL(currentItem^.Flags,ItemEnabled);
  78.     DEC(currentIntui^.LeftEdge,CheckWidth);
  79.     DEC(currentItem^.Height,2);
  80.     DEC(currentItem^.TopEdge);
  81.     DEC(nextItemTopEdge,2);
  82.   END AddSeperator;
  83.  
  84. VAR
  85.   item : MenuItemPtr;
  86. BEGIN
  87.   StartStrip;
  88.   INCL(nextItemFlags,CheckIt);
  89.   INC(nextIntuiLeftEdge,CheckWidth);
  90.   nextTextAttr:=ADR(textAttr);
  91.   
  92.   AddMenu(" Data ",123);
  93.     AddItemX("8  bits","8",LONGBITSET{1,2});
  94.     AddItemX("16 bits","1",LONGBITSET{0,2});
  95.     AddItemX("32 bits","3",LONGBITSET{0,1});
  96.  
  97.     AddSeperator();
  98.  
  99.     AddItemX("Signed","S",LONGBITSET{5});
  100.     AddItemX("Unsigned","U",LONGBITSET{4});
  101.   
  102.     AddSeperator;
  103.  
  104.     AddItem("About...","?");
  105.       DEC(currentIntui^.LeftEdge,CheckWidth);
  106.  
  107.   IF NOT stripFailed THEN
  108.     item:=ItemAddress(currentStrip,(ORD(WordSize8)+ORD(wordSize))*32);
  109.     INCL(item^.Flags,Checked);
  110.     item:=ItemAddress(currentStrip,(ORD(Signed)+ORD(NOT signed))*32);
  111.     INCL(item^.Flags,Checked);
  112.  
  113.     SetMenuStrip(window,currentStrip);
  114.   END;
  115.  
  116.   TERMPROC(TerminateCalcMenus);
  117.  
  118.   RETURN NOT stripFailed;
  119. END InitMenuStuff;
  120.  
  121.  
  122. PROCEDURE HandleMenuPick(VAR intui:IntuiMessage; menuCode:CARDINAL): INTEGER;
  123. VAR
  124.   dummy   : INTEGER;
  125.   itemPtr : MenuItemPtr;
  126. BEGIN
  127.   WHILE menuCode # MenuNULL DO
  128.     dummy:=FakeMenuPick(VAL(MenuType,ITEMNUM(menuCode)));
  129.     IF dummy # 0 THEN
  130.       RETURN dummy;
  131.     END;
  132.     itemPtr:=ItemAddress(currentStrip,menuCode);
  133.     menuCode:=itemPtr^.NextSelect;
  134.   END;
  135.  
  136.   RETURN 0;
  137. END HandleMenuPick;
  138.  
  139.  
  140. PROCEDURE FakeMenuPick(menuCode:MenuType): INTEGER;
  141. VAR
  142.   bits : LONGBITSET;
  143. BEGIN
  144.   CASE menuCode OF
  145.     |WordSize8 : wordSize:=WORD8;
  146.                  bits:=LONGBITSET{};
  147.                  IF signed & (LONGINT(value)<0) THEN
  148.                    bits:=LONGBITSET{8..31};
  149.                  END;
  150.                  value:=LONGCARD(LONGBITSET(value) * LONGBITSET(255));
  151.                  value:=LONGCARD(LONGBITSET(value) + bits);
  152.                  bits:=LONGBITSET{};
  153.                  IF signed & (LONGINT(stoValue)<0) THEN
  154.                    bits:=LONGBITSET{8..31};
  155.                  END;
  156.                  stoValue:=LONGCARD(LONGBITSET(stoValue) * LONGBITSET(255));
  157.                  stoValue:=LONGCARD(LONGBITSET(stoValue) + bits);
  158.     |WordSize16: wordSize:=WORD16;
  159.                  bits:=LONGBITSET{};
  160.                  IF signed & (LONGINT(value)<0) THEN
  161.                    bits:=LONGBITSET{16..31};
  162.                  END;
  163.                  value:=LONGCARD(LONGBITSET(value) * LONGBITSET(65535));
  164.                  value:=LONGCARD(LONGBITSET(value) + bits);
  165.                  bits:=LONGBITSET{};
  166.                  IF signed & (LONGINT(stoValue)<0) THEN
  167.                    bits:=LONGBITSET{16..31};
  168.                  END;
  169.                  stoValue:=LONGCARD(LONGBITSET(stoValue) * LONGBITSET(65535));
  170.                  stoValue:=LONGCARD(LONGBITSET(stoValue) + bits);
  171.     |WordSize32: wordSize:=WORD32;
  172.     |Signed    : signed:=TRUE;
  173.     |Unsigned  : signed:=FALSE;
  174.     |About     : WhoDoneIt();
  175.   ELSE
  176.   END;
  177.  
  178.   GhostUnused;
  179.   DoLCD;
  180.   RETURN 0;
  181. END FakeMenuPick;
  182.  
  183.  
  184. BEGIN
  185.   wordSize:=WORD32;
  186.   signed:=FALSE;
  187. END CalcMenus.
  188.